import { HttpAdapterHost, NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { Logger, ValidationPipe } from '@nestjs/common';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { AllExceptionsFilter } from './filters/all-exception.filters';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  app.setGlobalPrefix('api');

  const httpAdapter = app.get(HttpAdapterHost);
  const logger = new Logger();
  const config = new DocumentBuilder()
    .setTitle('接口文档Api')
    .setDescription('这是一个测试文档Api')
    .setVersion('1.0')
    .addServer('http://localhost:3000', '开发环境') // 设置基础路径
    .addServer('http://127.0.0.1:3000', '测试环境') // 设置基础路径
    .build();
  const document = SwaggerModule.createDocument(app, config);
  SwaggerModule.setup('api', app, document);
  // 全局设置 CORS
  // app.enableCors();
  // 更精细的控制
  app.enableCors({
    origin: '*', // 允许访问的域
    methods: 'GET,HEAD,PUT,PATCH,POST,DELETE', // 允许的 HTTP 方法
    credentials: true, // 是否允许发送凭据（例如，带有 Cookie 的请求）
  });
  app.useGlobalFilters(new AllExceptionsFilter(logger, httpAdapter));
  // 全局拦截器
  app.useGlobalPipes(
    new ValidationPipe({
      // 去除再类上不存在的字段
      whitelist: true,
    }),
  );
  await app.listen(3000);
}
bootstrap();
